#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10,INF=1e9;
int n,m,b[MAXN],stac[MAXN],top,cnt,root,st,ed;
struct Splay
{
	int key,c[2],sum,lmax,rmax,rootmax,cov,siz,fa;
	bool rev;
}a[MAXN];
void push_up(int o)
{
	a[o].sum=a[a[o].c[0]].sum+a[a[o].c[1]].sum+a[o].key;
	a[o].lmax=max(a[a[o].c[0]].lmax,a[a[o].c[0]].sum+a[o].key+max(0,a[a[o].c[1]].lmax));
	a[o].rmax=max(a[a[o].c[1]].rmax,a[a[o].c[1]].sum+a[o].key+max(0,a[a[o].c[0]].rmax));
	a[o].rootmax=max(max(a[a[o].c[0]].rootmax,a[a[o].c[1]].rootmax),max(0,a[a[o].c[0]].rmax)+a[o].key+max(0,a[a[o].c[1]].lmax));
	a[o].siz=a[a[o].c[0]].siz+a[a[o].c[1]].siz+1;
	return;
}
void reverse(int o)
{
	if(!o)return;
	swap(a[o].c[0],a[o].c[1]);
	swap(a[o].lmax,a[o].rmax);
	a[o].rev^=1;
	return;
}
void recover(int o,int x)
{
	if(!o)return;
	a[o].sum=x*a[o].siz;
	a[o].key=a[o].cov=x;
	a[o].lmax=a[o].rmax=a[o].rootmax=max(x,a[o].sum);
	return;
}
void push_down(int o)
{
	if(a[o].rev)
	{
		reverse(a[o].c[0]);
		reverse(a[o].c[1]);
		a[o].rev=false;
	}
	if(a[o].cov!=-INF)
	{
		recover(a[o].c[0],a[o].cov);
		recover(a[o].c[1],a[o].cov);
		a[o].cov=-INF;
	}
	return;
}
void rotate(int &o,int x)
{
	int y=a[x].fa,z=a[y].fa,dy=a[y].c[1]==x,dz=a[z].c[1]==y;
	push_down(y);
	if(o==y)o=x;
	else a[z].c[dz]=x;
	a[x].fa=z;
	a[y].c[dy]=a[x].c[dy^1];
	a[a[y].c[dy]].fa=y;
	a[x].c[dy^1]=y;
	a[y].fa=x;
	push_up(y);
	return;
}
void splay(int &o,int x)
{
	push_down(x);
	while(o!=x)
	{
		int y=a[x].fa,z=a[y].fa;
		if(o!=y)
		{
			if(a[y].c[1]==x^a[z].c[1]==y)rotate(o,x);
			else rotate(o,y);
		}
		rotate(o,x);
	}
	push_up(x);
	return;
}
int init(int x)
{
	int o=(!top)?++cnt:stac[top--];
	a[o].key=x;
	a[o].lmax=a[o].rmax=a[o].rootmax=a[o].cov=-INF;
	a[o].rev=false;
	a[o].siz=1;
	return o;
}
int insert(int l,int r)
{
	if(l>r)return 0;
	int mid=(l+r)>>1,lc,rc,o;
	lc=insert(l,mid-1);
	o=init(b[mid]);
	rc=insert(mid+1,r);
	a[o].c[0]=lc;a[lc].fa=o;
	a[o].c[1]=rc;a[rc].fa=o;
	push_up(o);
	return o;
}
void del(int &o)
{
	if(!o)return;
	stac[++top]=o;
	del(a[o].c[0]);
	del(a[o].c[1]);
	o=0;
	return;
}
int find(int o,int x)
{
	push_down(o);
	if(x<=a[a[o].c[0]].siz)return find(a[o].c[0],x);
	if(x==a[a[o].c[0]].siz+1)return o;
	return find(a[o].c[1],x-a[a[o].c[0]].siz-1);
}
int main()
{
	a[0].lmax=a[0].rmax=a[0].rootmax=a[0].cov=-INF;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)scanf("%d",&b[i+1]);
	root=insert(st=1,ed=n+2);
	while(m--)
	{
		char temp[20];
		int loc,nn,l,r;
		scanf("%s",temp+1);
		if(temp[1]=='I')
		{
			scanf("%d%d",&loc,&nn);
			for(int i=1;i<=nn;++i)scanf("%d",&b[i]);
			l=find(root,loc+1);r=find(root,loc+2);
			splay(root,r);splay(a[root].c[0],l);
			nn=insert(1,nn);
			a[l].c[1]=nn;a[nn].fa=l;
			push_up(l);push_up(r);
		}
		else if(temp[1]=='D')
		{
			scanf("%d%d",&loc,&nn);
			l=find(root,loc);r=find(root,loc+nn+1);
			splay(root,r);splay(a[root].c[0],l);
			del(a[l].c[1]);
			push_up(l);push_up(r);
		}
		else if(temp[1]=='M'&&temp[3]=='K')
		{
			int x;
			scanf("%d%d%d",&loc,&nn,&x);
			l=find(root,loc);r=find(root,loc+nn+1);
			splay(root,r);splay(a[root].c[0],l);
			recover(a[l].c[1],x);
		}
		else if(temp[1]=='R')
		{
			scanf("%d%d",&loc,&nn);
			l=find(root,loc);r=find(root,loc+nn+1);
			splay(root,r);splay(a[root].c[0],l);
			reverse(a[l].c[1]);
		}
		else if(temp[1]=='G')
		{
			scanf("%d%d",&loc,&nn);
			l=find(root,loc);r=find(root,loc+nn+1);
			splay(root,r);splay(a[root].c[0],l);
			printf("%d\n",a[a[l].c[1]].sum);
		}
		else
		{
			splay(root,ed);splay(a[root].c[0],st);
			printf("%d\n",a[a[st].c[1]].rootmax);
		}
	}
	return 0;
}
